package net.pws.oos.biz.query.impl;

import java.util.List;

import net.pws.oos.biz.model.SupervisionRecod;
import net.pws.oos.biz.query.SupervFinder;
import net.pws.oos.biz.query.SystemManageFinder;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
@SuppressWarnings({ "rawtypes", "unchecked" })
public class DefaultSupervFinder extends AbstractFinder implements SupervFinder {
    
    @Autowired
    private SystemManageFinder systemManageFinder;
    
//    public int countSubSuperv(String id) {
//        Number count = (Number) entityManager.findFirst(" from Superv t where t.parent.id = ? ",
//                                                        new Object[] { id });
//        return count.intValue();
//    }
//    
//    public List<Superv> getSubSupervList(String id) {
//        return (List<Superv>) entityManager.findList("from Superv t left join t.project where t.parent.id = ? ",
//                                                   new Object[] { id });
//    }
//    
//    public List<Map> getSubSupervListMap(String taskId) {
//        StringBuffer sql = new StringBuffer(QueryRepository.getInstance()
//                                                           .get("sql.getSubSupervList")).append(" where t.parent_id = ? ");
//        return (List<Map>) entityManager.nativeFindList(sql.toString(),
//                                                        new Object[] { taskId,
//                                                                      taskId });
//    }
//    
    public List<SupervisionRecod> getSubSupervListByTask(String taskId) {
        return (List<SupervisionRecod>) entityManager.findList("from SupervisionRecod t left join fetch t.task where t.task.id = ? ",
                                                   new Object[] { taskId });
    }
//    
//    public int countSuperv(String executePersonId, String status) {
//        SupervQueryParameter queryParameter = new SupervQueryParameter();
//        queryParameter.setExecPersonId(executePersonId);
//        queryParameter.setStatus(status);
//        return countSuperv(queryParameter);
//    }
//    
//    public int countSuperv(SupervQueryParameter queryParameter) {
//        StringBuilder hql = new StringBuilder("select count(t.id) from Superv t where t.parent is null ");
//        List<Object> params = new ArrayList<Object>();
//        buildSupervQueryRequest(queryParameter, hql, params);
//        
//        Number count = (Number) entityManager.findFirst(hql.toString(),
//                                                        params.toArray());
//        return count.intValue();
//    }
//    
//    public int countMySuperv(SupervQueryParameter queryParameter) {
//        StringBuilder hql = new StringBuilder("select count(t.id) from Superv t where t.parent is null and t.creator.id = ? ");
//        List<Object> params = new ArrayList<Object>();
//        params.add(queryParameter.getCreatorId());
//        buildSupervQueryRequest(queryParameter, hql, params);
//        
//        Number count = (Number) entityManager.findFirst(hql.toString(),
//                                                        params.toArray());
//        return count.intValue();
//    }
//    
//    public int countAllSuperv(SupervQueryParameter queryParameter) {
//        StringBuilder hql = new StringBuilder("select count(t.id) from Superv t where t.parent is null ");
//        List<Object> params = new ArrayList<Object>();
//        buildSupervQueryRequest(queryParameter, hql, params);
//        
//        Number count = (Number) entityManager.findFirst(hql.toString(),
//                                                        params.toArray());
//        return count.intValue();
//    }
//    
//    public List<Map> getSupervList(SupervQueryParameter queryParameter,
//                                 int start,
//                                 int limit) {
//        StringBuilder hql = new StringBuilder(QueryRepository.getInstance()
//                                                             .get("hql.getSupervList")).append(" where t.parent is null ");
//        List<Object> params = new ArrayList<Object>();
//        buildSupervQueryRequest(queryParameter, hql, params);
//        
//        // 排序
//        if (Superv.IN_PROGRESS_STATUS.equals(queryParameter.getStatus()) || Superv.ASSIGNED_STATUS.equals(queryParameter.getStatus())) {
//            hql.append(" order by t.createDateTime desc");
//        }
//        else if (Superv.COMPLETED_STATUS.equals(queryParameter.getStatus())) {
//            hql.append(" order by t.locateDate desc");
//        }
//        else {
//            hql.append(" order by t.createDateTime desc");
//        }
//        
//        IPage<Map> page = entityManager.findPage(hql.toString(),
//                                                 params.toArray(),
//                                                 start,
//                                                 limit);
//        return page.getData();
//    }
//    
//    public List<Map> getMySupervList(SupervQueryParameter queryParameter,
//                                   int start,
//                                   int limit) {
//        
//        StringBuilder hql = new StringBuilder(QueryRepository.getInstance()
//                                                             .get("hql.getSupervList")).append(" where t.parent is null and t.creator.id = ? ");
//        // StringBuilder hql = new
//        // StringBuilder("from Superv t left join t.project where t.parent is null and t.creator.id = ? ");
//        List<Object> params = new ArrayList<Object>();
//        params.add(queryParameter.getCreatorId());
//        buildSupervQueryRequest(queryParameter, hql, params);
//        
//        // 排序
//        if (Superv.ASSIGNED_STATUS.equals(queryParameter.getStatus()) || Superv.IN_PROGRESS_STATUS.equals(queryParameter.getStatus())) {
//            hql.append(" order by t.assignedDate desc");
//        }
//        else if (Superv.COMPLETED_STATUS.equals(queryParameter.getStatus())) {
//            hql.append(" order by t.endDate desc");
//        }
//        else {
//            hql.append(" order by t.createDateTime desc");
//        }
//        
//        IPage<Map> page = entityManager.findPage(hql.toString(),
//                                                 params.toArray(),
//                                                 start,
//                                                 limit);
//        return page.getData();
//    }
//    
//    public List<Map> getAllSupervList(SupervQueryParameter queryParameter,
//                                    int start,
//                                    int limit) {
//        StringBuilder hql = new StringBuilder(QueryRepository.getInstance()
//                                                             .get("hql.getSupervList")).append(" where t.parent is null ");
//        List<Object> params = new ArrayList<Object>();
//        buildSupervQueryRequest(queryParameter, hql, params);
//        
//        // 排序
//        if (Superv.ASSIGNED_STATUS.equals(queryParameter.getStatus()) || Superv.IN_PROGRESS_STATUS.equals(queryParameter.getStatus())) {
//            hql.append(" order by t.assignedDate desc");
//        }
//        else if (Superv.COMPLETED_STATUS.equals(queryParameter.getStatus())) {
//            hql.append(" order by t.endDate desc");
//        }
//        else {
//            hql.append(" order by t.createDateTime desc");
//        }
//        
//        IPage<Map> page = entityManager.findPage(hql.toString(),
//                                                 params.toArray(),
//                                                 start,
//                                                 limit);
//        return page.getData();
//    }
//    
//    /**
//     * Superv alias t User alias u
//     * 
//     * @param queryParameter
//     * @param hql
//     * @param params
//     */
//    private void buildSupervQueryRequest(SupervQueryParameter queryParameter,
//                                       StringBuilder hql,
//                                       List<Object> params) {
//        if (queryParameter == null) {
//            return;
//        }
//        if (StringUtils.isNotEmpty(queryParameter.getExecPersonId())) {
//            hql.append(" and t.executePerson.id=? ");
//            params.add(queryParameter.getExecPersonId());
//        }
//        if (StringUtils.isNotEmpty(queryParameter.getExecPersonIds())) {
//            hql.append(" and t.executePerson.id in (");
//            hql.append(queryParameter.getExecPersonIds()).append(") ");
//        }
//        if (StringUtils.isNotEmpty(queryParameter.getStatus())) {
//            hql.append(" and t.status=? ");
//            params.add(queryParameter.getStatus());
//        }
//        if (StringUtils.isNotEmpty(queryParameter.getName())) {
//            if (queryParameter.getName().startsWith("处理人 ")) {
//                hql.append(" and (t.executePerson.name like ?) ");
//                params.add("%" + queryParameter.getName()
//                                               .substring("处理人 ".length())
//                           + "%");
//            }
//            else if (queryParameter.getName().startsWith("处理人　")) {
//                hql.append(" and (t.executePerson.name like ?) ");
//                params.add("%" + queryParameter.getName()
//                                               .substring("处理人　".length())
//                           + "%");
//            }
//            else if (queryParameter.getName().startsWith("发起人 ")) {
//                hql.append(" and (t.creator.name like ?) ");
//                params.add("%" + queryParameter.getName()
//                                               .substring("发起人 ".length())
//                           + "%");
//            }
//            else if (queryParameter.getName().startsWith("发起人　")) {
//                hql.append(" and (t.creator.name like ?) ");
//                params.add("%" + queryParameter.getName()
//                                               .substring("发起人　".length())
//                           + "%");
//            }
//            else if (queryParameter.getName().startsWith("项目 ")) {
//                hql.append(" and (t.project.name like ?) ");
//                params.add("%" + queryParameter.getName()
//                                               .substring("项目 ".length()) + "%");
//            }
//            else if (queryParameter.getName().startsWith("项目　")) {
//                hql.append(" and (t.project.name like ?) ");
//                params.add("%" + queryParameter.getName()
//                                               .substring("项目　".length()) + "%");
//            }
//            else {
//                if (StringUtils.isNotEmpty(queryParameter.getProjectName())) {
//                    hql.append(" and (t.name like ? or t.project.name like ?) ");
//                    params.add("%" + queryParameter.getName() + "%");
//                    params.add("%" + queryParameter.getProjectName() + "%");
//                }else{ 
//                	hql.append(" and (t.name like ?) ");
//                    params.add("%" + queryParameter.getName() + "%");
//                }                
//            }
//        }
//        if (StringUtils.isNotEmpty(queryParameter.getProjectId())) {
//            hql.append(" and t.project.id=? ");
//            params.add(queryParameter.getProjectId());
//        }
//        if (StringUtils.isNotEmpty(queryParameter.getExecOrganId())) {
//            Organization org = entityManager.find(Organization.class,
//                                                  queryParameter.getExecOrganId());
//            if (org != null) {
//                hql.append(" and t.executeOrganization.innerCode like ?");
//                params.add(org.getInnerCode() + "%");
//            }
//        }
//        
//        // 计划时间
//        if (queryParameter.getPlanStartDate() != null) {
//            hql.append(" and t.planStartDate>=? ");
//            params.add(queryParameter.getPlanStartDate());
//        }
//        if (queryParameter.getPlanEndDate() != null) {
//            hql.append(" and t.planEndDate<? ");
//            params.add(DateUtils.addDay(queryParameter.getPlanEndDate(), 1));
//        }
//        
//        // 实际时间
//        if (queryParameter.getStartDate() != null) {
//            hql.append(" and t.startDate>=? ");
//            params.add(queryParameter.getStartDate());
//        }
//        if (queryParameter.getEndDate() != null) {
//            hql.append(" and t.endDate<? ");
//            params.add(DateUtils.addDay(queryParameter.getEndDate(), 1));
//        }
//        
//        // 创建时间
//        if (queryParameter.getCreateStartDate() != null) {
//            hql.append(" and t.createDateTime>=? ");
//            params.add(queryParameter.getCreateStartDate());
//        }
//        if (queryParameter.getCreateEndDate() != null) {
//            hql.append(" and t.createDateTime<? ");
//            params.add(DateUtils.addDay(queryParameter.getCreateEndDate(), 1));
//        }
//        
//        // 定位时间
//        if (queryParameter.getLocateStartDate() != null) {
//            hql.append(" and t.locateDate>=? ");
//            params.add(queryParameter.getLocateStartDate());
//        }
//        if (queryParameter.getLocateEndDate() != null) {
//            hql.append(" and t.locateDate<? ");
//            params.add(DateUtils.addDay(queryParameter.getLocateEndDate(), 1));
//        }
//        
//        if (queryParameter.getDataScope() == DataScope.Inside) {
//            hql.append(" and t.sourceSystem is null and t.sourceId is null ");
//        }
//        else if (queryParameter.getDataScope() == DataScope.Outside) {
//            hql.append(" and t.sourceSystem is not null and t.sourceId is not null ");
//        }
//        
//        if (StringUtils.isNotBlank(queryParameter.getCreateType())) {
//            hql.append(" and t.createType=? ");
//            params.add(queryParameter.getCreateType());
//        }      
//    }
//    
//    public Superv getSupervMap(String id) {
//        Superv task = new Superv();
//        StringBuilder hql = new StringBuilder(QueryRepository.getInstance()
//                                                             .get("hql.getSuperv"));
//        Map map = (Map) entityManager.findFirst(hql.toString(),
//                                                new Object[] { id });
//        if (map != null) {
//            BeanUtils.copyProperties(task, map);
//            // String taskDistrict = (String) map.get("taskDistrict");
//            // if (StringUtils.isNotEmpty(taskDistrict)) {
//            // District district = entityManager.find(District.class,
//            // taskDistrict);
//            // task.setDistrict(district);
//            // }
//            String taskCreator = (String) map.get("taskCreator");
//            if (StringUtils.isNotEmpty(taskCreator)) {
//                User creator = entityManager.find(User.class, taskCreator);
//                task.setCreator(creator);
//            }
//            String projectId = (String) map.get("taskProject");
//            if (StringUtils.isNotEmpty(projectId)) {
//                Project project = entityManager.find(Project.class, projectId);
//                task.setProject(project);
//            }
//            String executeOrganizationId = (String) map.get("taskExecuteOrganization");
//            if (StringUtils.isNotEmpty(executeOrganizationId)) {
//                Organization executeOrganization = entityManager.find(Organization.class,
//                                                                      executeOrganizationId);
//                task.setExecuteOrganization(executeOrganization);
//            }
//            String executePersonId = (String) map.get("taskExecutePerson");
//            if (StringUtils.isNotEmpty(executePersonId)) {
//                User executePerson = entityManager.find(User.class,
//                                                        executePersonId);
//                task.setExecutePerson(executePerson);
//            }
//        }
//        return task;
//    }
    
    public SupervisionRecod getSuperv(String id) {
        return (SupervisionRecod) entityManager.findFirst("from SupervisionRecod t left join fetch t.task where t.id = ? ",
                                              new Object[] { id });
    }
//    
//    public List<Map> getStatsUserList(SupervQueryParameter queryParameter) {
//        StringBuilder sql = new StringBuilder(QueryRepository.getInstance()
//                                                             .get("sql.getStatsUserList"));
//        List<Object> params = new ArrayList<Object>();
//        buildStatsQueryRequest(queryParameter, sql, params);
//        
//        StringBuilder countSql = new StringBuilder(QueryRepository.getInstance()
//                                                                  .get("sql.getStatsUserCount"));
//        buildStatsQueryRequest(queryParameter,
//                               countSql,
//                               new ArrayList<Object>());
//        
//        // 排序
//        sql.append(" order by o.name,u.name");
//        
//        IPage<Map> page = entityManager.nativeFindPage(countSql.toString(),
//                                                       sql.toString(),
//                                                       params.toArray(),
//                                                       queryParameter.getStart(),
//                                                       queryParameter.getLimit());
//        return page.getData();
//    }
//    
//    public int countStatsUser(SupervQueryParameter queryParameter) {
//        StringBuilder sql = new StringBuilder(QueryRepository.getInstance()
//                                                             .get("sql.getStatsUserCount"));
//        List<Object> params = new ArrayList<Object>();
//        buildStatsQueryRequest(queryParameter, sql, params);
//        Map map = (Map) entityManager.nativeFindFirst(sql.toString(),
//                                                      params.toArray());
//        return ((Number) map.get("userCount")).intValue();
//    }
//    
//    private void buildStatsQueryRequest(SupervQueryParameter queryParameter,
//                                        StringBuilder sql,
//                                        List<Object> params) {
//        if (queryParameter == null) {
//            return;
//        }
//        if (StringUtils.isNotEmpty(queryParameter.getExecPersonId())) {
//            sql.append(" and t.exec_person_id=? ");
//            params.add(queryParameter.getExecPersonId());
//        }
//        if (StringUtils.isNotEmpty(queryParameter.getStatus())) {
//            sql.append(" and t.status=? ");
//            params.add(queryParameter.getStatus());
//        }
//        if (StringUtils.isNotEmpty(queryParameter.getName())) {
//            sql.append(" and (t.name like ?) ");
//            params.add("%" + queryParameter.getName() + "%");
//        }
//        if (StringUtils.isNotEmpty(queryParameter.getProjectId())) {
//            sql.append(" and t.proj_id=? ");
//            params.add(queryParameter.getProjectId());
//        }
//        if (StringUtils.isNotEmpty(queryParameter.getExecOrganId())) {
//            Organization org = entityManager.find(Organization.class,
//                                                  queryParameter.getExecOrganId());
//            if (org != null) {
//                sql.append(" and o.inner_code like ?");
//                params.add(org.getInnerCode() + "%");
//            }
//        }
//        
//        // 计划时间
//        if (queryParameter.getPlanStartDate() != null) {
//            sql.append(" and t.plan_end_date>=? ");
//            params.add(queryParameter.getPlanStartDate());
//        }
//        if (queryParameter.getPlanEndDate() != null) {
//            sql.append(" and t.plan_end_date<? ");
//            params.add(DateUtils.addDay(queryParameter.getPlanEndDate(), 1));
//        }
//        
//        // 实际时间
//        if (queryParameter.getStartDate() != null) {
//            sql.append(" and t.real_end_date>=? ");
//            params.add(queryParameter.getStartDate());
//        }
//        if (queryParameter.getEndDate() != null) {
//            sql.append(" and t.real_end_date<? ");
//            params.add(DateUtils.addDay(queryParameter.getEndDate(), 1));
//        }
//        
//        // 创建时间
//        if (queryParameter.getCreateStartDate() != null) {
//            sql.append(" and t.create_datetime>=? ");
//            params.add(queryParameter.getCreateStartDate());
//        }
//        if (queryParameter.getCreateEndDate() != null) {
//            sql.append(" and t.create_datetime<? ");
//            params.add(DateUtils.addDay(queryParameter.getCreateEndDate(), 1));
//        }
//        
//        // 定位时间
//        if (queryParameter.getLocateStartDate() != null) {
//            sql.append(" and t.locate_date>=? ");
//            params.add(queryParameter.getLocateStartDate());
//        }
//        if (queryParameter.getLocateEndDate() != null) {
//            sql.append(" and t.locate_date<? ");
//            params.add(DateUtils.addDay(queryParameter.getLocateEndDate(), 1));
//        }
//        
//        if (queryParameter.getDataScope() == DataScope.Inside) {
//            sql.append(" and t.source_system is null and t.source_id is null ");
//        }
//        else if (queryParameter.getDataScope() == DataScope.Outside) {
//            sql.append(" and t.source_system is not null and t.source_id is not null ");
//        }
//        
//        if (StringUtils.isNotBlank(queryParameter.getCreateType())) {
//            sql.append(" and t.create_type=? ");
//            params.add(queryParameter.getCreateType());
//        }
//    }
//    
//    public List<Superv> getNoAddressSupervList(String id) {
//        StringBuilder hql = new StringBuilder(QueryRepository.getInstance()
//                                                             .get("hql.getNoAddressSupervList"));
//        
//        List<Object> params = new ArrayList<Object>();
//        hql.append(" and t.status=? ");
//        params.add(Superv.COMPLETED_STATUS);
//        
//        if (StringUtils.isNotBlank(id)) {
//            hql.append(" and t.id=? ");
//            params.add(id);
//        }
//        
//        return entityManager.findList(hql.toString(), params.toArray());
//    }
//    
//    @Override
//    public List<Map> listBySaleDemo(SupervQueryParameter queryParameter) {
//        StringBuilder hql = new StringBuilder(QueryRepository.getInstance()
//                                                             .get("hql.getSupervList")).append(" where t.parent is null ");
//        List<Object> params = new ArrayList<Object>();
//        buildSupervSaleDemoRequest(queryParameter, hql, params);
//        
//        // 排序
//        if (Superv.IN_PROGRESS_STATUS.equals(queryParameter.getStatus()) || Superv.ASSIGNED_STATUS.equals(queryParameter.getStatus())) {
//            hql.append(" order by t.createDateTime desc");
//        }
//        else if (Superv.COMPLETED_STATUS.equals(queryParameter.getStatus())) {
//            hql.append(" order by t.locateDate desc");
//        }
//        else {
//            hql.append(" order by t.createDateTime desc");
//        }
//        
//        IPage<Map> page = entityManager.findPage(hql.toString(),
//                                                 params.toArray(),
//                                                 queryParameter.getStart(),
//                                                 queryParameter.getLimit());
//        return page.getData();
//    }
//    
//    @Override
//    public int countBySaleDemo(SupervQueryParameter queryParameter) {
//        StringBuilder hql = new StringBuilder("select count(t.id) from Superv t where t.parent is null ");
//        List<Object> params = new ArrayList<Object>();
//        buildSupervSaleDemoRequest(queryParameter, hql, params);
//        
//        Number count = (Number) entityManager.findFirst(hql.toString(),
//                                                        params.toArray());
//        return count.intValue();
//    }
//    
//    /**
//     * Superv alias t User alias u
//     * 
//     * @param queryParameter
//     * @param hql
//     * @param params
//     */
//    private void buildSupervSaleDemoRequest(SupervQueryParameter queryParameter,
//                                          StringBuilder hql,
//                                          List<Object> params) {
//        if (queryParameter == null) {
//            return;
//        }
//        if (StringUtils.isNotEmpty(queryParameter.getExecPersonId())) {
//            hql.append(" and t.executePerson.id=? ");
//            params.add(queryParameter.getExecPersonId());
//        }
//        if (StringUtils.isNotEmpty(queryParameter.getExecPersonIds())) {
//            hql.append(" and t.executePerson.id in (");
//            hql.append(queryParameter.getExecPersonIds()).append(") ");
//        }
//        if (StringUtils.isNotEmpty(queryParameter.getStatus())) {
//            hql.append(" and t.status=? ");
//            params.add(queryParameter.getStatus());
//        }
//        if (StringUtils.isNotEmpty(queryParameter.getName())) {
//            if (queryParameter.getName().startsWith("处理人 ")) {
//                hql.append(" and (t.executePerson.name like ?) ");
//                params.add("%" + queryParameter.getName()
//                                               .substring("处理人 ".length())
//                           + "%");
//            }
//            else if (queryParameter.getName().startsWith("处理人　")) {
//                hql.append(" and (t.executePerson.name like ?) ");
//                params.add("%" + queryParameter.getName()
//                                               .substring("处理人　".length())
//                           + "%");
//            }
//            else if (queryParameter.getName().startsWith("发起人 ")) {
//                hql.append(" and (t.creator.name like ?) ");
//                params.add("%" + queryParameter.getName()
//                                               .substring("发起人 ".length())
//                           + "%");
//            }
//            else if (queryParameter.getName().startsWith("发起人　")) {
//                hql.append(" and (t.creator.name like ?) ");
//                params.add("%" + queryParameter.getName()
//                                               .substring("发起人　".length())
//                           + "%");
//            }
//            else if (queryParameter.getName().startsWith("项目 ")) {
//                hql.append(" and (t.project.name like ?) ");
//                params.add("%" + queryParameter.getName()
//                                               .substring("项目 ".length()) + "%");
//            }
//            else if (queryParameter.getName().startsWith("项目　")) {
//                hql.append(" and (t.project.name like ?) ");
//                params.add("%" + queryParameter.getName()
//                                               .substring("项目　".length()) + "%");
//            }
//            else {
//                hql.append(" and (t.name like ?) ");
//                params.add("%" + queryParameter.getName() + "%");
//            }
//        }
//        if (StringUtils.isNotEmpty(queryParameter.getProjectId())) {
//            hql.append(" and t.project.id=? ");
//            params.add(queryParameter.getProjectId());
//        }
//        if (StringUtils.isNotEmpty(queryParameter.getExecOrganId())) {
//            Organization org = entityManager.find(Organization.class,
//                                                  queryParameter.getExecOrganId());
//            if (org != null) {
//                hql.append(" and t.executeOrganization.innerCode like ?");
//                params.add(org.getInnerCode() + "%");
//            }
//        }
//        
//        // 创建时间
//        if (queryParameter.getCreateStartDate() != null) {
//            hql.append(" and t.createDateTime>=? ");
//            params.add(queryParameter.getCreateStartDate());
//        }
//        if (queryParameter.getCreateEndDate() != null) {
//            hql.append(" and t.createDateTime<? ");
//            params.add(DateUtils.addDay(queryParameter.getCreateEndDate(), 1));
//        }
//        
//        // 合并计划完成时间和实际定位时间
//        if (queryParameter.getLocateStartDate() != null && queryParameter.getLocateEndDate() != null) {
//            Date queryEndDate = DateUtils.addDay(queryParameter.getLocateEndDate(),
//                                                 1);
//            hql.append(" and ((t.locateDate>=? and t.locateDate<?) or (t.planEndDate>=? and t.planEndDate<?))");
//            params.add(queryParameter.getLocateStartDate());
//            params.add(queryEndDate);
//            params.add(queryParameter.getLocateStartDate());
//            params.add(queryEndDate);
//        }
//        
//        if (queryParameter.getDataScope() == DataScope.Inside) {
//            hql.append(" and t.sourceSystem is null and t.sourceId is null ");
//        }
//        else if (queryParameter.getDataScope() == DataScope.Outside) {
//            hql.append(" and t.sourceSystem is not null and t.sourceId is not null ");
//        }
//        
//        if (StringUtils.isNotBlank(queryParameter.getCreateType())) {
//            hql.append(" and t.createType=? ");
//            params.add(queryParameter.getCreateType());
//        }
//        
//    }
//    
//    @Override
//    public int countStats(SupervStatsByProjectQueryParameter queryParameter) {
//        List<Object> params = new ArrayList<Object>();
//        StringBuilder sql = new StringBuilder();
//        sql.append("select count(*) as recordCount from (");
//        sql.append(QueryRepository.getInstance().get("sql.listStatsByProject"));
//        buildStatsQueryRequest(queryParameter, sql, params);
//        sql.append(" group by p.id) aa ");
//        Map map = (Map) entityManager.nativeFindFirst(sql.toString(),
//                                                      params.toArray());
//        return ((Number) map.get("recordCount")).intValue();
//    }
//    
//    @Override
//    public List<Map> listStats(SupervStatsByProjectQueryParameter queryParameter) {
//        StringBuilder sql = new StringBuilder(QueryRepository.getInstance()
//                                                             .get("sql.listStatsByProject"));
//        List<Object> params = new ArrayList<Object>();
//        buildStatsQueryRequest(queryParameter, sql, params);
//        sql.append(" group by p.id order by p.year desc, p.name ");
//        IPage<Map> page = (IPage<Map>) entityManager.nativeFindPage(sql.toString(),
//                                                                    params.toArray(),
//                                                                    queryParameter.getStart(),
//                                                                    queryParameter.getLimit());
//        return page.getData();
//    }
//    
//    private void buildStatsQueryRequest(SupervStatsByProjectQueryParameter queryParameter,
//                                        StringBuilder sql,
//                                        List<Object> params) {
//        if (queryParameter == null) {
//            return;
//        }
//        
//        if (StringUtils.isNotEmpty(queryParameter.getName())) {
//            sql.append(" and p.name like ? ");
//            String like = "%" + queryParameter.getName() + "%";
//            params.add(like);
//        }
//        if (StringUtils.isNotBlank(queryParameter.getOrganId())) {
//            sql.append(" and p.organ_id=? ");
//            params.add(queryParameter.getOrganId());
//        }
//        if (StringUtils.isNotBlank(queryParameter.getAreaId())) {
//            sql.append(" and p.area_id=? ");
//            params.add(queryParameter.getAreaId());
//        }
//        if (StringUtils.isNotBlank(queryParameter.getSpecialId())) {
//            sql.append(" and p.special_id=? ");
//            params.add(queryParameter.getSpecialId());
//        }
//        if (StringUtils.isNotBlank(queryParameter.getCustomerId())) {
//            sql.append(" and p.customer_id=? ");
//            params.add(queryParameter.getCustomerId());
//        }
//        
//        if (queryParameter.getClose() != null) {
//            sql.append(" and p.close=? ");
//            params.add(queryParameter.getClose());
//        }
//        if (queryParameter.getYear() != null) {
//            sql.append(" and p.year=? ");
//            params.add(queryParameter.getYear());
//        }
//        
//        // 定位时间
//        if (queryParameter.getLocateStartDate() != null) {
//            sql.append(" and t.locate_date>=? ");
//            params.add(queryParameter.getLocateStartDate());
//        }
//        if (queryParameter.getLocateEndDate() != null) {
//            sql.append(" and t.locate_date<? ");
//            params.add(DateUtils.addDay(queryParameter.getLocateEndDate(), 1));
//        }
//        
//        if (queryParameter.getDataScope() == DataScope.Inside) {
//            sql.append(" and p.sourceSystem is null and p.sourceId is null ");
//        }
//        else if (queryParameter.getDataScope() == DataScope.Outside) {
//            sql.append(" and p.sourceSystem is not null and p.sourceId is not null ");
//        }
//    }
    
}
